package com.resoft.bigdata.p2p.record;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.hadoop.hbase.util.Bytes;



/***
 * 
 * @author ziv
 * 借款合同， 行键设计为：p2p 公司代码 + 合同编号  + 日期 
 */
public class LoanContract extends AbsRecord implements RecordInterface {
	public static final String TABLE_NAME = "J0901";
	public static final String[] FAMILY_NAMES= {"F1"};
	

	private String xmje; //项目金额，万元
	private String fbsj; //发表时间，精确到秒
	private String jklj; //借款连接
	private String qxlx; //期限类型：1-天，2-月
	private String zqzr; //债权转让 1-是，0-否
	private String xmqx; //项目期限
	private String jklv; //借款利率
	private String yjqxr; //预计起息日 yyyy-MM-dd
	private String hkfs;//还款方式
	private String dbfs; // 担保方式

	


	public static final byte[]  XMJE= Bytes.toBytes("XMJE");
	public static final byte[]  FBSJ= Bytes.toBytes("FBSJ");
	public static final byte[]  URL= Bytes.toBytes("URL");
	public static final byte[]  QXLX= Bytes.toBytes("QXLV");
	public static final byte[]  ZQZR= Bytes.toBytes("ZQZR");
	public static final byte[]  XMQX= Bytes.toBytes("XMQX");
	public static final byte[]  JKLV= Bytes.toBytes("JKLV");
	public static final byte[]  YJQXR= Bytes.toBytes("YJQXR");
	public static final byte[]  HKFS= Bytes.toBytes("HKFS");
	public static final byte[]  DBFS= Bytes.toBytes("DBFS");
	
	private static final byte[][] qualifiers = {ORG_CODE, ORG_NAME, DATADATE, REPORTER, CHECKER, 
		BANK_ID, DATE, XH, XMHT, XMJE, FBSJ, URL, QXLX, ZQZR, XMQX, JKLV, YJQXR, HKFS, DBFS};
	
	public List<byte[]> getQualifiers(){
		return Arrays.asList(qualifiers);
	}
	
//	public String getOrgCode() {
//		return orgCode;
//	}
//
//
//	public void setOrgCode(String orgCode) {
//		this.orgCode = orgCode;
//	}
//
//
//
//	public String getBankId() {
//		return bankId;
//	}
//
//
//
//	public void setBankId(String bankId) {
//		this.bankId = bankId;
//	}
//
//
//
//	public String getDDate() {
//		return ddate;
//	}
//
//
//
//	public void setDDate(String date) {
//		this.ddate = date;
//	}
//
//
//
//	public String getXh() {
//		return xh;
//	}
//
//
//
//	public void setXh(String xh) {
//		this.xh = xh;
//	}
//
//
//
//	public String getXmht() {
//		return xmht;
//	}
//
//
//
//	public void setXmht(String xmht) {
//		this.xmht = xmht;
//	}
//


	public String getXmje() {
		return xmje;
	}



	public void setXmje(String xmje) {
		this.xmje = xmje;
	}



	public String getFbsj() {
		return fbsj;
	}



	public void setFbsj(String fbsj) {
		this.fbsj = fbsj;
	}



	public String getJklj() {
		return jklj;
	}



	public void setJklj(String url) {
		this.jklj = url;
	}



	public String getQxlx() {
		return qxlx;
	}



	public void setQxlx(String qxlx) {
		this.qxlx = qxlx;
	}



	public String getZqzr() {
		return zqzr;
	}



	public void setZqzr(String zqzr) {
		this.zqzr = zqzr;
	}



	public String getXmqx() {
		return xmqx;
	}



	public void setXmqx(String xmqx) {
		this.xmqx = xmqx;
	}



	public String getJklv() {
		return jklv;
	}



	public void setJklv(String jklv) {
		this.jklv = jklv;
	}



	public String getYjqxr() {
		return yjqxr;
	}



	public void setYjqxr(String yjqxr) {
		this.yjqxr = yjqxr;
	}



	public String getHkfs() {
		return hkfs;
	}



	public void setHkfs(String hkfs) {
		this.hkfs = hkfs;
	}



	public String getDbfs() {
		return dbfs;
	}



	public void setDbfs(String dbfs) {
		this.dbfs = dbfs;
	}

	
	

//	public String getOrgName() {
//		return orgName;
//	}
//
//	public void setOrgName(String orgName) {
//		this.orgName = orgName;
//	}
//
//	public String getDataDate() {
//		return dataDate;
//	}
//
//	public void setDataDate(String dataDate) {
//		this.dataDate = dataDate;
//	}
//
//	public String getReporter() {
//		return reporter;
//	}
//
//	public void setReporter(String reporter) {
//		this.reporter = reporter;
//	}
//
//	public String getChecker() {
//		return checker;
//	}
//
//	public void setChecker(String checker) {
//		this.checker = checker;
//	}

//	/* (non-Javadoc)
//	 * @see com.resoft.bigdata.p2p.RecordInterface#getRowKey()
//	 */
//	public byte[] getRowKey() throws Exception {
//	/*
//	 *  * 行键设计为：p2p机构代码 +  日期 + 序号
//	 * 
//	*/		
//		return getRowKey(orgCode, ddate, Integer.parseInt(xh));
//	}
//	
//	public static byte[] getRowKey(String orgCode, String dateString, int xh) throws Exception{
//		byte [] buffer = new byte[12];
//		Bytes.putInt(buffer, 0, orgCode.hashCode());
//		int days = DateUtil.reverseDate(dateString);
//		if(days == Integer.MAX_VALUE){
//			throw  new Exception("Bad date");
//		}
//		Bytes.putInt(buffer, 4, days);
//		Bytes.putInt(buffer, 8, xh);
//		return buffer ;
//	}
	
	/* (non-Javadoc)
	 * @see com.resoft.bigdata.p2p.RecordInterface#getCells()
	 */
	public Map<byte[], byte[]> getCells(){
		Map<byte[], byte[]> cells = new HashMap<byte[], byte[]>();
		
		Map<byte[], byte[]> superCells = super.getCells();
		cells.putAll(superCells);
		
//		if(orgCode != null) cells.put(ORG_CODE, Bytes.toBytes(orgCode));
//		if(orgName != null) cells.put(ORG_NAME, Bytes.toBytes(orgName));
//		if(dataDate != null) cells.put(DATADATE, Bytes.toBytes(dataDate));
//		if(reporter != null) cells.put(REPORTER, Bytes.toBytes(reporter));
//		if(checker != null) cells.put(CHECKER, Bytes.toBytes(checker));
//		if(bankId != null) cells.put(BANK_ID, Bytes.toBytes(bankId));
//		if(ddate != null) cells.put(DATE, Bytes.toBytes(ddate));
//		if(xh != null) cells.put(XH, Bytes.toBytes(xh));
//		if(xmht != null) cells.put(XMHT, Bytes.toBytes(xmht));
		if(xmje != null) cells.put(XMJE, Bytes.toBytes(xmje));
		if(fbsj != null) cells.put(FBSJ, Bytes.toBytes(fbsj));
		if(jklj != null) cells.put(URL, Bytes.toBytes(jklj));
		if(qxlx != null) cells.put(QXLX, Bytes.toBytes(qxlx));
		if(zqzr != null) cells.put(ZQZR, Bytes.toBytes(zqzr));
		if(xmqx != null) cells.put(XMQX, Bytes.toBytes(xmqx));
		if(jklv != null) cells.put(JKLV, Bytes.toBytes(jklv));
		if(yjqxr != null) cells.put(YJQXR, Bytes.toBytes(yjqxr));
		if(hkfs != null) cells.put(HKFS, Bytes.toBytes(hkfs));
		if(dbfs != null) cells.put(DBFS, Bytes.toBytes(dbfs));
		
		return cells;
	}
	
//	public void setValue(byte[] key, byte[] value){
//		Method methods[] = this.getClass().getDeclaredMethods();
//		String methodName = "set" + Bytes.toString(key);
//		String valueString = Bytes.toString(value);
//		for(int i = 0; i < methods.length; i++){
//			if(methods[i].getName().equalsIgnoreCase(methodName)){
//				try {
//					methods[i].invoke(this, valueString);
//				} catch (IllegalAccessException e) {
//					System.err.println("IllegalAccessException，"  + TABLE_NAME + ", Key:" + key + ", Value:" + value);
//					e.printStackTrace();
//				} catch (IllegalArgumentException e) {
//					System.err.println("IllegalArgumentException，"  + TABLE_NAME + ", Key:" + key + ", Value:" + value);
//					e.printStackTrace();
//				} catch (InvocationTargetException e) {
//					System.err.println("InvocationTargetException，"  +  TABLE_NAME + ", Key:" + key + ", Value:" + value);
//					e.printStackTrace();
//				}
//			}
//			
//		}
//	}	
		
//		if(Bytes.compareTo(key, ORG_CODE) == 0){
//			setOrgCode(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, BANK_ID) == 0){
//			setBankId(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, DATE) == 0){
//			setDate(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, XH) == 0){
//			setXh(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, XMHT) == 0){
//			setXmht(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, XMJE) == 0){
//			setXmje(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, FBSJ) == 0){
//			setFbsj(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, URL) == 0){
//			setUrl(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, QXLX) == 0){
//			setQxlx(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, ZQZR) == 0){
//			setZqzr(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, XMQX) == 0){
//			setXmqx(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, JKLV) == 0){
//			setJklv(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, YJQXR) == 0){
//			setYjqxr(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, HKFS) == 0){
//			setHkfs(Bytes.toString(value));
//		}else if(Bytes.compareTo(key, DBFS) == 0){
//			setDbfs(Bytes.toString(value));
//		}else{
//			System.err.println(TABLE_NAME + ", Key:" + key + ", Value:" + value);
//		}
//	}


//	@Override
//	public String toString() {
//		return "LoanContract [orgCode=" + orgCode + ", date=" + ddate + ", xh="
//				+ xh + ", xmht=" + xmht + ", xmje=" + xmje + "]";
//	}

	@Override
	public String toString() {
		return "LoanContract [xmje=" + xmje + ", fbsj=" + fbsj 
				+ ", qxlx=" + qxlx + ", zqzr=" + zqzr + ", xmqx=" + xmqx
				+ ", jklv=" + jklv + ", yjqxr=" + yjqxr + ", hkfs=" + hkfs
				+ ", dbfs=" + dbfs + ", orgCode=" + orgCode + ", dataDate="
				+ dataDate + ", bankId=" + bankId + ", ddate=" + ddate
				+ ", xh=" + xh + ", xmht=" + xmht + "]";
	}
	
	
	public String getCreatePhoenixTableSQL() {
		//TODO:
		StringBuilder sb = new StringBuilder();
		sb.append("CREATE TABLE " +  TABLE_NAME + "  ");
		sb.append("( PK varbinary PRIMARY KEY, ");
		sb.append("  F1." + Bytes.toString(ORG_CODE) + "  varchar, ");
		sb.append("  F1." + Bytes.toString(ORG_NAME) + "  varchar, ");
		sb.append("  F1." + Bytes.toString(DATADATE) + "  varchar, ");
		sb.append("  F1." + Bytes.toString(REPORTER) + "  varchar, ");
		sb.append("  F1." + Bytes.toString(CHECKER) + "  varchar, ");
		sb.append("  F1." + Bytes.toString(BANK_ID )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(DATE )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(XH )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(XMHT )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(XMJE )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(FBSJ) + "  varchar ");
		sb.append("  F1." + Bytes.toString(URL )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(QXLX) + "  varchar ");
		sb.append("  F1." + Bytes.toString(ZQZR )+ "  varchar, ");
		sb.append("  F1." + Bytes.toString(XMQX) + "  varchar ");
		sb.append("  F1." + Bytes.toString(JKLV) + "  varchar ");
		sb.append("  F1." + Bytes.toString(YJQXR) + "  varchar ");
		sb.append("  F1." + Bytes.toString(HKFS) + "  varchar ");	
		sb.append("  F1." + Bytes.toString(DBFS) + "  varchar ");	
		sb.append(")");
 
		return sb.toString();
	}
	


	public String getTableName() {
		return TABLE_NAME;
	}

	public String[] getFamilies() {
		return FAMILY_NAMES;
	}



}
